package com.smartleanx.module.hrm.service.risk;

import javax.validation.*;

import com.smartleanx.module.hrm.controller.admin.risk.vo.*;
import com.smartleanx.module.hrm.dal.dataobject.risk.RiskTypeDO;
import com.smartleanx.framework.common.pojo.PageResult;

import java.util.List;
import java.util.Set;

/**
 * 风险点 Service 接口
 *
 * @author tengcj
 */
public interface RiskService {

    /**
     * 获得风险点概况（首页）
     *
     * @return
     */
    RiskProfileRespVO getProfile();

    /**
     * 获得风险详情（首页）
     *
     * @return
     */
    RiskDetailRespVO getDetail(Integer riskLevel);

    /**
     * 获得风险员工（首页）
     *
     * @return
     */
    List<RiskEmployeeRespVO> getRiskEmployee(RiskQueryReqVO queryReqVO);

    /**
     * 获得风险点
     *
     * @param id
     * @return
     */
    RiskTypeDO getRiskType(Long id);

    /**
     * 添加员工风险
     *
     * @param employeeId
     * @param riskType
     * @param level
     */
    void addRiskToEmployee(Long employeeId, Long riskType, Integer level);

    /**
     * 添加员工风险
     *
     * @param employeeId
     * @param riskType
     * @param level
     * @param recordId
     */
    void addRisk(Long employeeId, Long riskType, Integer level, Long recordId);

    /**
     * 删除风险
     *
     * @param employeeId
     * @param riskType
     */
    void deleteRisk(Long employeeId, Long riskType);

    /**
     * 删除风险
     *
     * @param employeeId
     * @param riskType
     */
    void deleteRisk(Set<Long> employeeId, Long riskType);

    /**
     * 删除风险
     *
     * @param employeeId
     * @param riskType
     * @param recordId
     */
    void deleteRisk(Long employeeId, Long riskType, Long recordId);

    /**
     * 删除风险
     *
     * @param riskType
     * @param recordIds
     */
    void deleteRisk(Long riskType, Set<Long> recordIds);

    /**
     * 取消风险
     *
     * @param reqVO
     */
    void cancelRiskEmp(RiskCancelRiskEmpReqVO reqVO);

    /**
     * 删除员工风险
     *
     * @param employeeId
     */
    void deleteRiskByEmployeeId(Long employeeId);

    /**
     * 取消风险
     *
     * @param reqVO
     */
    void cancelEmpRisk(RiskCancelEmpRiskReqVO reqVO);

    /**
     * 获得风险点的制度
     *
     * @param riskId
     * @return
     */
    List<RiskRegulationRespVO> getRiskRegulation(Long riskId);

    /**
     * 修改员工风险部门（员工数据同步）
     *
     * @param employeeId
     * @param deptId
     */
    void changeEmpRiskDept(Long employeeId, Long deptId);
}